/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package AdmonHorarios;

import Usuarios.conexion;
import java.util.ArrayList;
import java.util.List;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;

/**
 *
 * @author Miguel
 */
public class AdminCursos {
    
    //Conexion para la Base de Datos
    private EntityManagerFactory emf = conexion.getInstancia().getEMF();
    private EntityManager em = emf.createEntityManager();
    
    public boolean existeAsignacion(int idSec){
        boolean existe=false;
        Query qr = em.createQuery("SELECT hc from Horariocurso hc "
                + "where hc.asignacionSeccionCursoidAsignacionSeccionCurso.idAsignacionSeccionCurso="+idSec);
        List<Entidades.Horariocurso> HCurso =qr.getResultList();
        if (HCurso.size()>0){
            existe=true;
        }
        return existe;
    }
    
    public void filtrarCatedraticosPorCurso(ArrayList<Catedratico> Catedraticos, ArrayList<Curso> Cursos,
            int posCurso) {
        Catedraticos.clear();
        int posCu = posCurso;
        Query qr = em.createQuery("SELECT c.idCurso from Curso c where c.nombre = '" + Cursos.get(posCu).getNombre() + "'"
                    + " and c.anulado = false");
        List<Integer> idc = qr.getResultList();
            
        qr = em.createQuery("select cp.catedraticoidCatedratico.numeroCatedratico from Cursoposible cp "
                    + "where cp.cursoidCurso.idCurso =" + idc.get(0));
        List<Integer> idcat = qr.getResultList();
           
        for (int i=0; i<idcat.size(); i++){
                qr = em.createQuery("select c from Catedratico c where "
                        + "c.numeroCatedratico = " + idcat.get(i)  +" and c.anulado=false");
            List<Entidades.Catedratico> cat = qr.getResultList();
            Catedratico cate = new Catedratico();
            cate.setIdCatedratico(cat.get(0).getNumeroCatedratico());
            cate.setNombres(cat.get(0).getNombre());
            cate.setApellidos(cat.get(0).getApellidos());
            cate.setCreditos(cat.get(0).getCreditos());
            Catedraticos.add(cate);
        }
    }
    
    public ObservableList<Curso> obtenerCursosSecciones(String Carrera, String Ciclo, String Jornada, String Año, String Semestre){
        ObservableList<Curso> Cursos = FXCollections.observableArrayList();
        Query qr = em.createQuery("Select c.idCarrera from Carrera c where c.nombre = '"+
                Carrera + "' and c.anulado = false");
        List<Integer> idC =qr.getResultList();
            
        qr = em.createQuery("Select c.idCiclo from Ciclo c where c.numeroCiclo = "+
                Ciclo + " and c.anulado = false");
        List<Integer> idCic =qr.getResultList();
            
        qr = em.createQuery("select a.idAsignacionCicloCarrera from Asignacionciclocarrera a"
                    + " where a.cicloidCiclo.idCiclo = "+idCic.get(0)+" and a.carreraidCarrera.idCarrera = "+idC.get(0));
        List<Integer> idA =qr.getResultList();
        //Info de los Cursos del ciclo:
        Query qr0 = em.createQuery("select c.idCurso from Curso c "
                    + "where c.asignacionCicloCarreraidAsignacionCicloCarrera.idAsignacionCicloCarrera = " + idA.get(0)
                    + " and c.anulado = false");
        List<Integer> idCursos =qr0.getResultList();
        Query qr1 = em.createQuery("select c.nombre from Curso c "
                    + "where c.asignacionCicloCarreraidAsignacionCicloCarrera.idAsignacionCicloCarrera = " + idA.get(0)
                    + " and c.anulado = false");
        List<String> NCursos =qr1.getResultList();
        Query qr2 = em.createQuery("select c.periodosSemanales from Curso c "
                    + "where c.asignacionCicloCarreraidAsignacionCicloCarrera.idAsignacionCicloCarrera = " + idA.get(0)
                    + " and c.anulado = false");
        List<Short> PSemana =qr2.getResultList();
        Query qr3 = em.createQuery("select c.creditospracticos from Curso c "
                    + "where c.asignacionCicloCarreraidAsignacionCicloCarrera.idAsignacionCicloCarrera = " + idA.get(0)
                    + " and c.anulado = false");
        List<Short> CPracticos =qr3.getResultList();
        Query qr4 = em.createQuery("select c.creditosteoricos from Curso c "
                    + "where c.asignacionCicloCarreraidAsignacionCicloCarrera.idAsignacionCicloCarrera = " + idA.get(0)
                    + " and c.anulado = false");
        List<Short> CTeoricos =qr4.getResultList();
        Curso curs;
        for (int i=0; i<NCursos.size(); i++){
            curs = new Curso(NCursos.get(i),PSemana.get(i),Integer.parseInt(Ciclo),
                        1,CPracticos.get(i),CTeoricos.get(i),false,null);
            //Jornada
            Query qr9 = em.createQuery("Select j.idJornada from Jornada j "
                        + "where j.nombre = '"+Jornada
                        + "' and j.anulado = false");
            List<Integer> idJ =qr9.getResultList();
            //Semestre
            Query qr10 = em.createQuery("Select s.idSemestre from Semestre s "
                    + "where s.año='"+Año+"-01-01"
                    + "' and s.semestre="+Semestre
                    + " and s.anulado=false");
            List<Integer> idSemes =qr10.getResultList();
            //Secciones del curso:
            Query qr5 = em.createQuery("Select a.idAsignacionSeccionCurso from Asignacionseccioncurso a "
                        + "where a.cursoidCurso.idCurso = "+idCursos.get(i)
                        + " and a.semestreidSemestre.idSemestre="+idSemes.get(0)
                        + " and a.jornadaidJornada.idJornada="+idJ.get(0)
                        + " and a.anulado = false");
            List<Integer> idASC =qr5.getResultList();
            for (int j=0; j<idASC.size(); j++){
                //Informacion de cada seccion:
                Query qr6 = em.createQuery("Select a.seccionidSeccion.idSeccion from Asignacionseccioncurso a "
                        + "where a.idAsignacionSeccionCurso = "+idASC.get(j)
                        + " and a.anulado = false"
                        + " and a.semestreidSemestre.idSemestre="+idSemes.get(0)
                        + " and a.jornadaidJornada.idJornada = "+idJ.get(0));
                List<Integer> idSec =qr6.getResultList();
                Query qr7 = em.createQuery("Select s.nombre from Seccion s "
                        + "where s.idSeccion = "+idSec.get(0) + " and s.anulado = false");
                List<String> NSec =qr7.getResultList();
                Query qr8 = em.createQuery("Select a.numeroEstudiantes from Asignacionseccioncurso a "
                        + "where a.idAsignacionSeccionCurso = "+idASC.get(0)
                        + " and a.semestreidSemestre.idSemestre="+idSemes.get(0)
                        + " and a.anulado = false"
                        + " and a.jornadaidJornada.idJornada = "+idJ.get(0));
                List<Short> Cupo =qr8.getResultList();
                Seccion sec=new Seccion(idASC.get(j),NSec.get(0),Cupo.get(0),
                            Carrera,Jornada,true);
                curs.setSeccion(sec);
            }
            //Este objeto tiene todos los cursos del ciclo y sus respectivas secciones
            Cursos.add(curs);        
        }
        return Cursos;
    }
    
}
